﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MobiShop.Models
{
    // hoàng
    // để xài kiểm tra quyền admin, dùng chỉ thị [MyAuthorize(MyRole=2)]  
    // (tham số: MyRole=1-user; 2-admin ; RedirectURL: chuỗi URL muốn redirect tới nếu xác thực ko đúng quyền ) 
    // , đặt trên khai báo lớp controler nếu muốn kiểm soát trên toàn bộ controler
    // , đặt trên action nếu chỉ muốn kiểm soát 1 action nào đó
    public class MyAuthorizeAttribute : AuthorizeAttribute
    {
        public string RedirectURL { get; set; }
        public byte MyRole { get; set; }

        public MyAuthorizeAttribute()
            :base()
        {
            MyRole = 1;
            RedirectURL = null;
        }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            Account account = (Account)httpContext.Session["Account"];
            if (account == null) return false;
            return account.role == MyRole && account.visible==true;
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (RedirectURL != null && RedirectURL.Length > 0)
            {
                filterContext.Result = new RedirectResult(RedirectURL);
            }
            else
            {
                filterContext.Result = new RedirectResult("/Home/Login");
            }
        }
    }
}